public class First {
    public int a = 1;
    public static int b = 4;
    public void func(){
        //在外部类调用实例内部类--->必须创建一个实力内部类的对象！！！
        innerclass sum = new innerclass();
        System.out.println(sum.a);

        System.out.println("诶呦");
    }
    //实例内部类
    class innerclass{
        int a = 10;
        public int b = 2;
        //实例内部类不能有静态的成员变量
        //因为static要先于实例内部类使用，在实例内部类未创建时就编译static
        /** 没有实例内部类就没有 static
        *   public static int c = 0;//错
        *   public static final int d = 20;//对
        */
        //final与const相似，被其修饰的变量无法修改
        //final定义常量，在编译时确定

        public void show(){
            /** 方法当中不能有static修饰的变量
             *  static int abc = 0;//错
             *
            */
            //获取外部类的同名变量------>First.this.a
            System.out.println(First.this.a);

            //就近原则——————
            System.out.println(a);
            System.out.println(b);
        }
    }

    public static void main(String[] args) {
        final int a;
        a = 10;

        System.out.println(a);
        //创建实例内部类的对象：
        //方法一
        First str = new First();
        First.innerclass ch = str.new innerclass();
        ch.show();
        //实例内部类
        //First.innerclass是ch的类型，str调用new innerclass()
        //方法二
        First.innerclass ch1 = new First().new innerclass();
        ch1.show();
    }
    public static void main1(String[] args) {
        int a = 10;
        System.out.println(a);
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        System.out.println("hello bit");
    }
}
